package com.ttbj.api.order;

import java.util.List;

import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.order.OrderCustomDriverDto;
import com.ttbj.api.dto.order.OrderCustomDto;
import com.ttbj.api.dto.order.OrderWorkDto;
import com.ttbj.api.dto.order.WaybillDto;
import com.ttbj.api.exception.BusinessException;

public interface OrderService {
	
	/**
	 * 分页条件查询预订单信息，只查状态是预约状态的搬运单分配给业务员
	 * @param orderCustomDto 封装了条件查询的信息
	 * @param page 分页信息
	 * @return
	 * @throws BusinessException
	 */
	public List<OrderCustomDto> findAdvanceSalOrderInfoByPage(OrderCustomDto orderCustomDto, Page page) throws BusinessException;
	
	/**
	 * 分页条件查询预订单信息数量，只查状态是预约状态的搬运单分配给业务员
	 * @param orderCustomDto 封装了条件查询的信息
	 * @return
	 * @throws BusinessException
	 */
	public Integer findAdvanceSalOrderInfoByPageCount(OrderCustomDto orderCustomDto) throws BusinessException;
	
	/**
	 * 分页条件查询未支付的订单信息，只查询未支付的
	 * @param orderCustomDto
	 * @param page
	 * @return
	 * @throws BusinessException
	 */
	public List<OrderCustomDto> findAdvanceOrderInfoByPage(OrderCustomDto orderCustomDto, Page page) throws BusinessException;
	
	/**
	 * 分页条件查询未支付的订单信息数量，只查询未支付的
	 * @param orderCustomDto
	 * @return
	 * @throws BusinessException
	 */
	public Integer findAdvanceOrderInfoByPageCount(OrderCustomDto orderCustomDto) throws BusinessException;
	
	/**
	 * 分页条件查询支付及账单信息，只查状态是支付成功的搬运单
	 * @param orderCustomDto 封装了条件查询的信息
	 * @param page 分页信息
	 * @return
	 * @throws BusinessException
	 */
	public List<OrderCustomDto> findCompleteOrderInfoByPage(OrderCustomDto orderCustomDto, Page page) throws BusinessException;
	
	/**
	 * 分页条件查询支付及账单信息数量，只查状态是支付成功的搬运单
	 * @param orderCustomDto 封装了条件查询的信息
	 * @return
	 * @throws BusinessException
	 */
	public Integer findCompleteOrderInfoByPageCount(OrderCustomDto orderCustomDto) throws BusinessException;
	
	/**
	 * 分页查询预订单信息，只查状态转为手动的搬运单分配司机
	 * @param page 分页信息
	 * @return
	 * @throws BusinessException
	 */
	public List<OrderCustomDriverDto> findqueryAdvanceDriOrderInfoByPage(Page page) throws BusinessException;
	 
	/**
	 * 分页查询预订单信息数量，只查状态转为手动的搬运单分配给司机
	 * @throws BusinessException
	 */
	public Integer findAdvanceDriOrderInfoByPageCount() throws BusinessException;
	
	/**
	 * 增加预订单与业务员之间的信息，完成预订单分配给业务员
	 * @param orderWorkDto 封装预订单及业务员信息
	 * @throws BusinessException
	 */
	public void addToOrderWorkInfo(OrderWorkDto orderWorkDto) throws BusinessException;
	
	/**
	 * 增加预订单与司机之间的信息，完成预订单分配给司机
	 * @param waybillDtos
	 * @throws BusinessException
	 */
	public void addToWaybillInfo(List<WaybillDto> waybillDtos) throws BusinessException;
	
	/**
	 * 查询最新的一个搬运单订单信息，条件是预约状态和是否搬运单
	 * @return Long 订单id
	 */
	public Long findNewestOrderInfo();
}
